 1.电商分析之--会员活跃度之高仿日启动数据测试
   
   数据采集 => ODS => DWD => DWS => ADS> MySQL
   活跃会员、新增会员、会员留存
   DAU： Daily Active User（日活跃用户）
   MAU： monthly active user（月活跃用户）
   假设App的DAU在1000W左右，日启动数据大概 1000W 条；
   测试3天的数据：7月21日、7月22日、7月23日。1000W条数据约3.5G+，每条记录约370字节。
   1).Hive on MR测试
   选择 7 月 21 日 的启动日志进行测试
   (1).使用 flume 采集数据（采集3天的数据）
    修改flume的参数：1G滚动一次；加大channel缓存；加大刷新 hdfs 的缓存
# 配置文件滚动方式（文件大小1G）
a1.sinks.k1.hdfs.rollSize = 1073741824
a1.channels.c1.capacity = 500000
a1.channels.c1.transactionCapacity = 20000
# 向hdfs上刷新的event个数
a1.sinks.k1.hdfs.batchSize = 10000
    
   # 清理工作。删除元数据文件、日志、hdfs等文件
   rm -f /data/lagoudw/conf/startlog_position.json
   rm -rf /data/lagoudw/logs/start/*
   hdfs dfs -rm -r -f /user/data/logs/start/dt=2020-07-21
   */
   
   # 启动flume
flume-ng agent --conf /opt/apps/flume-1.9/conf --conf-file
/data/lagoudw/conf/flume-log2hdfs4.conf -name a1 -Dflume.root.logger=INFO,console
   
   # 写日志
   java -cp data-generator-1.1-SNAPSHOT-jar-with-dependencies.jar
com.lagou.ecommerce.AppStart 1 10000000 2020-07-21 > /data/lagoudw/logs/start/start0721.log
   
   java -cp data-generator-1.1-SNAPSHOT-jar-with-dependencies.jar
com.lagou.ecommerce.AppStart 6000000 16000000 2020-07-22 >
/data/lagoudw/logs/start/start0722.log
   java -cp data-generator-1.1-SNAPSHOT-jar-with-dependencies.jar
com.lagou.ecommerce.AppStart 8000000 18000000 2020-07-23 >
/data/lagoudw/logs/start/start0723.log
   
   # 检查 hdfs 文件是否到达
   hdfs dfs -ls /user/data/logs/start/dt=2020-07-21
   (2).执行脚本
   SCRIPT_HOME=/data/lagoudw/script/member_active
   
   # 加载 ODS 层数据（文件与表建立关联）
   sh $SCRIPT_HOME/ods_load_startlog.sh 2020-07-21
   
   # 加载 ODS 层数据（解析json数据）
   sh $SCRIPT_HOME/dwd_load_startlog.sh 2020-07-21
   
   # number of mappers: 14; number of reducers: 0
   # 是一个 map-only 的 Task；只对输入的数据做格式上的转换，没有聚合操作
   #(即没有reduce task)
   # mapred.max.split.size=256M；3.5G / 256M = 14 Mapper Task
   
   # 活跃会员
   sh $SCRIPT_HOME/dws_load_member_start.sh 2020-07-21
   # number of mappers: 3; number of reducers: 2
   # 调整了task的内存分配(根据实际情况分配)
   # 任务执行时间：3.5 + 3 + 3 = 10分钟
   # ODS(Text) => 14个map => DWD(parquet) => 小文件合并 256M切分 => 3 map
   
   sh $SCRIPT_HOME/ads_load_member_active.sh 2020-07-21
   
   # 新增会员
   sh $SCRIPT_HOME/dws_load_member_add_day.sh 2020-07-21
   sh $SCRIPT_HOME/ads_load_member_add.sh 2020-07-21
   
   # 会员留存
   sh $SCRIPT_HOME/dws_load_member_retention_day.sh 2020-07-21
   sh $SCRIPT_HOME/ads_load_member_retention.sh 2020-07-21
   相关表：
select count(*) from ods.ods_start_log where dw='2020-07-21';
select count(*) from dwd.dwd_start_log where dw='2020-07-21';
select count(*) from dws.dws_member_start_day where dw='2020-07-21';
select count(*) from dws.dws_member_start_week where dw='2020-07-21';
select count(*) from dws.dws_member_start_month where dw='2020-07-21';
select count(*) from dws.dws_member_add_day where dw='2020-07-21';
select count(*) from dws.dws_member_retention_day where dw='2020-07-21';
select count(*) from ads.ads_member_active_count where dw='2020-07-21';
select count(*) from ads.ads_new_member_cnt where dw='2020-07-21';
select count(*) from ads.ads_member_retention_count where dw='2020-07-21';
select count(*) from ads.ads_member_retention_rate where dw='2020-07-21';
   遇到的问题：
   Error: Java heap space
   原因：内存分配问题
   解决思路：给map、reduce task分配合理的内存；map、reduce task处理合理的数据
   现在情况下map task分配了多少内存？使用的是缺省参数每个task分配200M内存
  【mapred.child.java.opts】
   每个节点：8 core / 32G; mapred.child.java.opts = 3G
   <property>
        <name>mapred.child.java.opts</name>
        <value>-Xmx3072m</value>
   </property>
   调整map个数：
   mapred.max.split.size=256000000
   调整reduce个数：
   hive.exec.reducers.bytes.per.reducer
   hive.exec.reducers.max